#-*- coding: utf-8 -*-

import ConfigParser

class config (object):
	__instance = None
	
	# Имя файла конфига
	__fname = "texgui.ini"
	
	@staticmethod
	def instance():
		if config.__instance is None:
			config.__instance = config()
			
		return config.__instance
	
	def __init__(self):
		# Настройки главного окна
		self.windowPos = (20, 20)
		self.windowSize = (640, 480)
		
		# Настройки редактора
		# Стиль по умолчанию
		self.default_style = "size:%d" % 14
		
		# Подсветка парных скобок
		self.bracelight_style = "fore:#0000FF"
		
		#  Подсветка ошибочных скобок
		self.bracebad_style = "fore:#FF0000"
		
		# Подсветка команд TeX
		self.command_style = "fore:#EF701B"
		
		# Подсветка нижних индексов
		self.subscript_style = "fore:#5AAF5A"
		
		# Команды в нижнем индексе
		#self.subcommand_style = "back:#BBBBBB;fore:#EF701B"
		
		# Подсветка верхних индексов
		self.superscript_style = "fore:#00AAFF"
		
		
		self.load()
	
		
	def getintval (self, parser, section, option, defval):
		try:
			return parser.getint (section, option)
		except:
			return defval
	
	
	def getstyle (self, parser, section, option, defval):
		try:
			style = parser.get (section, option)
		except:
			return defval
		
		style = style.replace (" ", "")
		return style
	
		
	def load (self):
		"""Загрузить параметры из файла"""		
		try:
			fp = file (config.__fname)
		except:
			return		
						
		parser = ConfigParser.ConfigParser()
		parser.readfp (fp)
		
		# Позиция главного окна
		xpos = self.getintval (parser, u"window", u"xpos", 20)
		ypos = self.getintval (parser, u"window", u"ypos", 20)
		
		self.windowPos = (xpos, ypos)
		
		
		# Размеры главного окна
		xsize = self.getintval (parser, u"window", u"width", 640)
		ysize = self.getintval (parser, u"window", u"height", 480)
		
		self.windowSize = (xsize, ysize)
		
		
		# Стили редактора 		
		# Стиль по умолчанию
		self.default_style = self.getstyle (parser, u"editor", "default", "size:%d" % 14)
		
		# Подсветка парных скобок
		self.bracelight_style = self.getstyle (parser, u"editor", "bracelight", "fore:#0000FF")
		
		#  Подсветка ошибочных скобок
		self.bracebad_style = self.getstyle (parser, u"editor", "bracebad", "fore:#FF0000")
		
		# Подсветка команд TeX
		self.command_style = self.getstyle (parser, u"editor", "command", "fore:#EF701B")
		
		# Подсветка нижних индексов
		self.subscript_style = self.getstyle (parser, u"editor", "subscript", "fore:#5AAF5A")
		
		# Подсветка верхних индексов
		self.superscript_style = self.getstyle (parser, u"editor", "superscript", "fore:#00AAFF")
		
		# Команды в нижнем индексе
		#self.subcommand_style = self.getstyle (parser, u"editor", "subcommand", "back:#BBBBBB;fore:#EF701B")
	
	def save (self):
		parser = ConfigParser.ConfigParser()
		
		# Главное окно
		parser.add_section (u"window")
		
		if self.windowSize[0] > 0:
			parser.set (u"window", u"width", self.windowSize[0])
			
		if self.windowSize[1] > 0:
			parser.set (u"window", u"height", self.windowSize[1])
		
		parser.set (u"window", "xpos", self.windowPos[0])
		parser.set (u"window", "ypos", self.windowPos[1])
		
				
		# Стили редактора 		
		parser.add_section (u"editor")
		
		# Стиль по умолчанию
		parser.set (u"editor", "default", self.default_style)
		
		# Подсветка парных скобок
		parser.set (u"editor", "bracelight", self.bracelight_style)
		
		#  Подсветка ошибочных скобок
		parser.set (u"editor", "bracebad", self.bracebad_style)
		
		# Подсветка команд TeX
		parser.set (u"editor", "command", self.command_style)
		
		# Подсветка нижних индексов
		parser.set (u"editor", "subscript", self.subscript_style)
		
		# Подсветка верхних индексов
		parser.set (u"editor", "superscript", self.superscript_style)
		
		# Команды в нижнем индексе
		#parser.set (u"editor", "subcommand", self.subcommand_style)
		
		fp = file (config.__fname, "w")
		parser.write (fp)
		fp.close()